#if 1
#pragma once

#include <opencv2/opencv.hpp>
#include <cmath>
#include <chrono>
#include <fstream>
#include <iostream>
#include <sstream>
#include <numeric>
#include <vector>
#include <dirent.h>
#include "NvInfer.h"
#include <cuda_runtime_api.h>
#include "utils/logging.h"

#include <cudnn_v8.h>
#include <cuda.h>
#include <cudnn_ops_infer_v8.h>
#include <cudnn_cnn_infer_v8.h>
#include <cuda_runtime.h>

#include "preprocess.cuh"
#include "trt_tensor.hpp"
#include <cuda_runtime.h>
#include <string>

class Track4y500FPS {
public:

    /**
     * 跟踪初始化
     * @param frame opencv Mat格式的数据
     * @param roi cv::Rect roi:(x, y, w, h)
     */
    void init(cv::Mat& frame, cv::Rect roi);

    /**
     * 更新目标框方法
     * @param frame opencv Mat格式的数据
     * @param scores 目标框得分
     * @return
     */
    cv::Rect update(cv::Mat frame, float &scores);

    Track4y500FPS();
    ~Track4y500FPS();

private:
    class ContainerClass;
    std::unique_ptr<ContainerClass> ContainerInstance;
};

#endif
